# 导入必要的模块
import os  # 用于文件和目录操作
import time  # 用于时间控制
from playwright.sync_api import sync_playwright  # 使用Playwright进行浏览器自动化

# 动画帧捕获核心逻辑
def sync_capture(pageList, output_dir, fps=24):
    """
    捕获HTML页面动画并保存为系列帧图片
    
    参数说明：
    pageList: HTML文件路径列表
    output_dir: 截图输出根目录
    fps: 帧率（默认24）
    """
    # 创建输出根目录（如果不存在）
    os.makedirs(output_dir, exist_ok=True)
    # 初始化保存目录的列表
    screenshot_dirs = []
    # 遍历每个HTML页面
    for html_path in pageList:
        # 为每个页面创建单独的输出目录
        page_name = os.path.splitext(os.path.basename(html_path))[0]
        page_output_dir = os.path.join(output_dir, page_name)
        os.makedirs(page_output_dir, exist_ok=True)
        # 将当前页面的输出目录添加到列表中
        screenshot_dirs.append(page_output_dir)
        # 检查HTML文件是否存在
        if not os.path.exists(html_path):
            print(f'警告：HTML文件未找到：{html_path}')
            continue
        
        # 使用Playwright进行浏览器自动化
        with sync_playwright() as p:
            try:
                browser = p.chromium.launch(headless=True)
                page = browser.new_page()
                
                # 加载本地HTML文件
                local_file_url = f'file://{os.path.abspath(html_path)}'.replace('\\', '/')
                page.goto(local_file_url, timeout=60000, wait_until='domcontentloaded')

                # 获取动画总时长
                duration = page.evaluate('''() => {
                    return parseFloat(getComputedStyle(document.documentElement)
                        .getPropertyValue('--animation-duration')) || 5;
                }''')

                #total_frames = int(duration * fps)
                total_frames = 24
                print(f'准备为页面 {page_name} 捕获 {total_frames} 帧动画...')

                # 逐帧捕获动画
                for frame in range(total_frames):
                    timestamp = (frame / total_frames) * duration
                    
                    page.evaluate('''(t) => {
                        document.documentElement.style.setProperty(
                            '--animation-timestamp',
                            `${t.toFixed(3)}s`
                        );
                    }''', timestamp)
                    
                    time.sleep(0.05)
                    
                    # 保存到页面专属目录
                    output_path = os.path.join(page_output_dir, f'frame_{frame:04d}.png')
                    page.screenshot(path=output_path, full_page=True)

                print(f'成功保存 {total_frames} 帧到 {page_output_dir}')

            except Exception as e:
                print(f'页面 {page_name} 截图失败：{str(e)}')
            finally:
                browser.close()
    # 返回所有截图目录
    return screenshot_dirs
# 保持原有API兼容性
# 将sync_capture函数赋值给capture_animation_frames
capture_animation_frames = sync_capture